
import { getToken, removeToken, setToken } from '@/utils/auth'
import { getUserInfoApi, loginApi } from '@/api/user'

// 储存状态
const state = {
  token: getToken() || '', // 用户token
  UserInfo: {}
}
// 同步操作
const mutations = {
  /**
   * 储存用户token
   * @param {*} state 当前模块的状态对象
   * @param {*} val 要储存的token
   */
  setUserToken(state, val) {
    state.token = val
    // 储存到本地Cookies存储
    setToken(val)
  },
  /**
   *
   * @param {*} state 当前模块的状态对象
   * @param {*} val 用户基本信息
   */
  UserInfo(state, val) {
    state.UserInfo = val
  },
  // 清除token
  removeUserToken(state, val) {
    // 清除vuex中的token
    state.token = ''
    // 清除本地token
    removeToken()
  },
  // 清空表单
  removeInfo(state, val) {
    state.UserInfo = val
  }
}
// 异步操作
const actions = {
  /**
   * 发送登录请求 获取token
   * @param {*} context 上下文,调用commit,提交mutations
   * @param {*} val 登录表单的数据 monille password
   */
  async login(context, val) {
    const token = await loginApi(val)
    // 调用commit提交mutations 传递token
    context.commit('setUserToken', token)
  },
  /**
   *  获取用户基本信息
   * @param {*} context
   */
  async getUserInfo(context) {
    // 调用用户基本信息接口
    const UserInfo = await getUserInfoApi()
    // console.log(UserInfo)
    context.commit('UserInfo', UserInfo)
  },
  logout(context) {
    context.commit('removeUserToken')
    context.commit('removeInfo', {})
  }
}

export default {
  // 开启命名空间
  namespaced: true,
  // 储存状态
  state,
  // 同步操作
  mutations,
  // 异步操作
  actions

}
